﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplicationGDI2
{
    public partial class Form1 : Form
    {
        HatchStyle hs;
        //LinearGradientMode hs;
        //WrapMode hs;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics gf = e.Graphics; // объект создаем

            Pen p = new Pen(Color.SeaGreen);
            //gf.DrawLine(p, new Point(100, 100), new Point(400, 120)); // создание линии
            Rectangle r = new Rectangle(new Point(50,50), new Size(500, 280));  // Создаем прямоугольник
            //Brush b = new SolidBrush(Color.Silver);  // солидбраш - кисть которая заливает одним цветом
            //Brush b = new TextureBrush(Bitmap.FromFile("C:\\Desert.bmp"));  // загружем в прямоугольник картинку.
            Brush b = new HatchBrush(hs, Color.Silver, Color.Green);
            //Brush b = new LinearGradientBrush(r, Color.Silver, Color.Gold, hs); // градиентная ксить. один плавно в другой цвет.
            float[] dv = { 5, 2, 14, 3 };
            p.Width = 7;
            p.DashPattern = dv;
            gf.DrawLine(p, new Point(100, 100), new Point(400, 170));
            Point[] pa = new Point[100];
            Random rnd = new Random(Environment.TickCount);

            for (int i = 0; i < pa.Length; i++)
            {
                pa[i] = new Point(rnd.Next(0, ClientSize.Width), rnd.Next(100, ClientSize.Height));
            }
            //Brush b = new PathGradientBrush(pa, hs);
            gf.FillRectangle(b, r); // закрашивает прямоугольрник.



            gf.Dispose();   // освобождаем память. утилизируем
        }

        private void Form1_Load(object sender, EventArgs e)
        {        
            WindowsFormsApplicationGDI2.Class1.Enumer en = new WindowsFormsApplicationGDI2.Class1.Enumer(
                typeof(HatchStyle
                /*LinearGradientMode*/
                /*WrapMode*/), this);
            en.onChanged +=en_onChanged;
        }

        void en_onChanged(Class1.Enumer sender, object value)
        {
            hs = (HatchStyle)value; // полюнашего класса присваиваем пришедшее значение
            //hs = (LinearGradientMode)value;
           // hs = (WrapMode)value;
            Invalidate();   // и перерисовываем
        }
    }
}
